iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0

Day9 多表操作:子查詢

後面會有多表操作的章節,先來介紹常用的 subquery

subquery 是很方便的多表操作方式,也被稱作隱式

我們這次用三張表,Employee, Company, Department

CREATE TABLE Employee (
    Name VARCHAR(100),
    Email VARCHAR(100),
    EmployeeID INT PRIMARY KEY,
    DepartmentID INT,
    CompanyID INT
);

CREATE TABLE Company (
    CompanyID INT PRIMARY KEY,
    CompanyCName VARCHAR(100), -- 中文公司名稱
    CompanyEName VARCHAR(100)   -- 英文公司名稱
);

CREATE TABLE Department (
    DepartmentID INT PRIMARY KEY,
    DepartmentCName VARCHAR(100), -- 中文部門名稱
    DepartmentEName VARCHAR(100),  -- 英文部門名稱
    CompanyID INT -- 部門所屬公司
);

INSERT INTO Employee (Name, Email, EmployeeID, DepartmentID, CompanyID) VALUES
('Alice', 'alice@example.com', 1, 101, 1),
('Bob', 'bob@example.com', 2, 102, 2),
('Charlie', 'charlie@example.com', 3, 103, 1),
('David', 'david@example.com', 4, 101, 1),
('Eve', 'eve@example.com', 5, 102, 2);

INSERT INTO Company (CompanyID, CompanyCName, CompanyEName) VALUES
(1, '台灣科技公司', 'Taiwan Tech Co.'),
(2, '美國商業公司', 'US Commerce Co.'),
(3, '日本電子公司', 'Japan Electronics Co.'),
(4, '德國製造公司', 'German Manufacturing Co.'),
(5, '中國金融公司', 'China Finance Co.');

INSERT INTO Department (DepartmentID, DepartmentCName, DepartmentEName, CompanyID) VALUES
(101, '銷售部', 'Sales', 1),
(102, '人力資源部', 'Human Resources', 2),
(103, '資訊技術部', 'Information Technology', 1),
(104, '研發部', 'Research and Development', 3),
(105, '市場部', 'Marketing', 4),
(106, '財務部', 'Finance', 5);

目前table有了,資料有了,來一個 subquery 的範例

select 
	Name, 
	(select CompanyCName from Company where CompanyID = Employee.CompanyID ), 
	(select DepartmentCName from Department where DepartmentID = Employee.DepartmentID)
from Employee 

結果

| 姓名     | 公司             | 部門        |
| ------- | ---------------- | -----------|
| Alice   | 台灣科技公司       | 銷售部      |
| Bob     | 美國商業公司       | 人力資源部   |
| Charlie | 台灣科技公司       | 資訊技術部   |
| David   | 台灣科技公司       | 銷售部      |
| Eve     | 美國商業公司       | 人力資源部   |

subquery 是個人覺得一個多表操作的最簡單的語法,但上述這種語法效能其實不好(相較於join語法),但因為寫起來簡單,所以先介紹!


上一篇
Day8 Group by, Having
下一篇
Day10 join
系列文
我獨自升級之資料庫從入門到中階20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言